package com.mock.water.core.validation;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.HashSet;
import java.util.Set;

/**
 * $$ 第一个泛型是校验注解，第二个是参数类型
 *
 * @author ifredomvip@gmail.com
 * @version 1.0.0
 * @date 2022/10/14 17:18
 **/
public class DefineRangeValidator implements ConstraintValidator<DefineRangeValidationValues, Integer> {


    /**
     * 存储枚举值
     */
    private Set<Integer> enumValues = new HashSet<>();

    /**
     * 初始化
     *
     * @param constraintAnnotation 约束注释
     */
    @Override
    public void initialize(DefineRangeValidationValues constraintAnnotation) {
        ConstraintValidator.super.initialize(constraintAnnotation);
        for (int value : constraintAnnotation.values()) {
            enumValues.add(value);
        }
    }

    /**
     * 是否有效
     *
     * @param value                      整数
     * @param constraintValidatorContext 约束验证器上下文
     * @return boolean
     */
    @Override
    public boolean isValid(Integer value, ConstraintValidatorContext constraintValidatorContext) {
        //判断是否包含这个值
        return enumValues.contains(value);
    }
}
